home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / obero / oberon_lib.lha / oberon-a / source1.lha / source / Amiga / LowLevel.mod < prev    next >
Text File  |  1994-08-08  |  10KB  |  381 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: LowLevel.mod $
  4.   Description: Interface to lowlevel.library
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.1 $
  8.       $Author: fjc $
  9.         $Date: 1994/08/08 01:18:15 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A Interface Copyright © 1994, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20. *************************************************************************)
  21.  
  22. MODULE LowLevel;
  23.  
  24. (*
  25. ** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
  26. ** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
  27. ** $V- OvflChk       $Z- ZeroVars
  28. *)
  29.  
  30. IMPORT
  31.   E   := Exec,
  32.   U   := Utility,
  33.   T   := Timer,
  34.   SYS := SYSTEM;
  35.  
  36. (*
  37. **      $VER: lowlevel.h 40.6 (30.7.93)
  38. **
  39. **      lowlevel.library interface structures and definitions.
  40. *)
  41.  
  42. (*****************************************************************************)
  43.  
  44. TYPE
  45.  
  46. (* structure for use with QueryKeys() *)
  47.   KeyQueryPtr * = CPOINTER TO KeyQuery;
  48.   KeyQuery * = RECORD
  49.     keyCode * : E.UWORD;
  50.     pressed * : E.BOOL;
  51.   END;
  52.  
  53.  
  54. (*****************************************************************************)
  55.  
  56. CONST
  57.  
  58. (* bits in the return value of GetKey() *)
  59.   kbLShift * = 16;
  60.   kbRShift * = 17;
  61.   kbCapsLock * = 18;
  62.   kbControl * = 19;
  63.   kbLAlt * = 20;
  64.   kbRAlt * = 21;
  65.   kbLAmiga * = 22;
  66.   kbRAmiga * = 23;
  67.  
  68.  
  69. (*****************************************************************************)
  70.  
  71. CONST
  72.  
  73. (* Tags for SetJoyPortAttrs() *)
  74.   sjaDummy * = U.tagUser + 0C00100H;
  75.   sjaType * = sjaDummy+1;             (* force type to mouse, joy, game cntrlr *)
  76.   sjaReinitialize * = sjaDummy+2;     (* free potgo bits, reset to autosense   *)
  77.  
  78. (* Controller types for sjaType tag *)
  79.   sjaTypeAutoSense * = 0;
  80.   sjaTypeGameCtlr * = 1;
  81.   sjaTypeMouse * = 2;
  82.   sjaTypeJoystk * = 3;
  83.  
  84.  
  85. (*****************************************************************************)
  86.  
  87. CONST
  88.  
  89. (* ReadJoyPort() return value definitions *)
  90.  
  91. (* Port types *)
  92.   jpTypeNotAvail * = 0;               (* port data unavailable    *)
  93.   jpTypeGameCtlr * = 010000000H;               (* port has game controller *)
  94.   jpTypeMouse * = 020000000H;                 (* port has mouse           *)
  95.   jpTypeJoyStk * = 030000000H;                 (* port has joystick        *)
  96.   jpTypeUnknown * = 040000000H;               (* port has unknown device  *)
  97.   jpTypeMask * = 0F0000000H;                  (* controller type          *)
  98.  
  99. (* Button types, valid for all types except JP_TYPE_NOTAVAIL *)
  100.   jpButtonBlue * = 23;           (* Blue - Stop; Right Mouse                *)
  101.   jpButtonRed * = 22;            (* Red - Select; Left Mouse; Joystick Fire *)
  102.   jpButtonYellow * = 21;         (* Yellow - Repeat                         *)
  103.   jpButtonGreen * = 20;          (* Green - Shuffle                         *)
  104.   jpButtonForward * = 19;        (* Charcoal - Forward              *)
  105.   jpButtonReverse * = 18;        (* Charcoal - Reverse              *)
  106.   jpButtonPlay * = 17;           (* Grey - Play/Pause; Middle Mouse         *)
  107.   jpButtonMask * = { jpButtonBlue, jpButtonRed, jpButtonYellow,
  108.                      jpButtonGreen, jpButtonForward, jpButtonReverse,
  109.                      jpButtonPlay };
  110.  
  111. (* Direction types, valid for jpTypeGamectlr and jpTypeJoystk *)
  112.   jpJoyUp * = 3;
  113.   jpJoyDown * = 2;
  114.   jpJoyLeft * = 1;
  115.   jpJoyRight * = 0;
  116.   jpDirectionMask * = {jpJoyUp, jpJoyDown, jpJoyLeft, jpJoyRight};
  117.  
  118. (* Mouse position reports, valid for jpTypeMouse *)
  119.   jpMHorzMask * = {0..7};                (* horzizontal position *)
  120.   jpMVertMask * = {8..15};                (* vertical position    *)
  121.   jpMouseMask * = jpMHorzMask + jpMVertMask;
  122.  
  123. (* Obsolete ReadJoyPort() definitions, here for source code compatibility only.
  124.  * Please do NOT use in new code.
  125.  *)
  126.   jpBtn1 * = jpButtonBlue;
  127.   jpBtn2 * = jpButtonRed;
  128.   jpBtn3 * = jpButtonYellow;
  129.   jpBtn4 * = jpButtonGreen;
  130.   jpBtn5 * = jpButtonForward;
  131.   jpBtn6 * = jpButtonReverse;
  132.   jpBtn7 * = jpButtonPlay;
  133.   jpUp * = jpJoyUp;
  134.   jpDown * = jpJoyDown;
  135.   jpLeft * = jpJoyLeft;
  136.   jpRight * = jpJoyRight;
  137.  
  138.  
  139. (*****************************************************************************)
  140.  
  141. CONST
  142.  
  143. (* Tags for SystemControl() *)
  144.   sconDummy * = U.tagUser + 000C00000H;
  145.   sconTakeOverSys * = sconDummy+0;
  146.   sconKillReq * = sconDummy+1;
  147.   sconCDReboot * = sconDummy+2;
  148.   sconStopInput * = sconDummy+3;
  149.   sconAddCreateKeys * = sconDummy+4;
  150.   sconRemCreateKeys * = sconDummy+5;
  151.  
  152. (* Reboot control values for use with SCON_CDReboot tag *)
  153.   cdRebootOn * = 1;
  154.   cdRebootOff * = 0;
  155.   cdRebootDefault * = 2;
  156.  
  157.  
  158. (*****************************************************************************)
  159.  
  160. CONST
  161.  
  162. (* Rawkey codes returned when using sconAddCreateKeys with SystemControl() *)
  163.  
  164.   rawkeyPort0ButtonBlue * = 072H;
  165.   rawkeyPort0ButtonRed * = 078H;
  166.   rawkeyPort0ButtonYellow * = 077H;
  167.   rawkeyPort0ButtonGreen * = 076H;
  168.   rawkeyPort0ButtonForward * = 075H;
  169.   rawkeyPort0ButtonReverse * = 074H;
  170.   rawkeyPort0ButtonPlay * = 073H;
  171.   rawkeyPort0JoyUp * = 079H;
  172.   rawkeyPort0JoyDown * = 07AH;
  173.   rawkeyPort0JoyLeft * = 07CH;
  174.   rawkeyPort0JoyRight * = 07BH;
  175.  
  176.   rawkeyPort1ButtonBlue * = 0172H;
  177.   rawkeyPort1ButtonRed * = 0178H;
  178.   rawkeyPort1ButtonYellow * = 0177H;
  179.   rawkeyPort1ButtonGreen * = 0176H;
  180.   rawkeyPort1ButtonForward * = 0175H;
  181.   rawkeyPort1ButtonReverse * = 0174H;
  182.   rawkeyPort1ButtonPlay * = 0173H;
  183.   rawkeyPort1JoyUp * = 0179H;
  184.   rawkeyPort1JoyDown * = 017AH;
  185.   rawkeyPort1JoyLeft * = 017CH;
  186.   rawkeyPort1JoyRight * = 017BH;
  187.  
  188.   rawkeyPort2ButtonBlue * = 0272H;
  189.   rawkeyPort2ButtonRed * = 0278H;
  190.   rawkeyPort2ButtonYellow * = 0277H;
  191.   rawkeyPort2ButtonGreen * = 0276H;
  192.   rawkeyPort2ButtonForward * = 0275H;
  193.   rawkeyPort2ButtonReverse * = 0274H;
  194.   rawkeyPort2ButtonPlay * = 0273H;
  195.   rawkeyPort2JoyUp * = 0279H;
  196.   rawkeyPort2JoyDown * = 027AH;
  197.   rawkeyPort2JoyLeft * = 027CH;
  198.   rawkeyPort2JoyRight * = 027BH;
  199.  
  200.   rawkeyPort3ButtonBlue * = 0372H;
  201.   rawkeyPort3ButtonRed * = 0378H;
  202.   rawkeyPort3ButtonYellow * = 0377H;
  203.   rawkeyPort3ButtonGreen * = 0376H;
  204.   rawkeyPort3ButtonForward * = 0375H;
  205.   rawkeyPort3ButtonReverse * = 0374H;
  206.   rawkeyPort3ButtonPlay * = 0373H;
  207.   rawkeyPort3JoyUp * = 0379H;
  208.   rawkeyPort3JoyDown * = 037AH;
  209.   rawkeyPort3JoyLeft * = 037CH;
  210.   rawkeyPort3JoyRight * = 037BH;
  211.  
  212.  
  213. (*****************************************************************************)
  214.  
  215. CONST
  216.  
  217. (* Return values for GetLanguageSelection() *)
  218.   langUnknown * = 0;
  219.   langAmerican * = 1;           (* American English *)
  220.   langEnglish * = 2;            (* British English  *)
  221.   langGerman * = 3;
  222.   langFrench * = 4;
  223.   langSpanish * = 5;
  224.   langItalian * = 6;
  225.   langPortuguese * = 7;
  226.   langDanish * = 8;
  227.   langDutch * = 9;
  228.   langNorwegian * = 10;
  229.   langFinnish * = 11;
  230.   langSwedish * = 12;
  231.   langJapanese * = 13;
  232.   langChinese * = 14;
  233.   langArabic * = 15;
  234.   langGreek * = 16;
  235.   langHebrew * = 17;
  236.   langKorean * = 18;
  237.  
  238.  
  239. (*****************************************************************************)
  240.  
  241. (*-- Library Base variable --------------------------------------------*)
  242.  
  243. CONST
  244.  
  245.   name * = "lowlevel.library";
  246.  
  247. TYPE
  248.  
  249.   LowLevelBasePtr* = CPOINTER TO LowLevelBase;
  250.   LowLevelBase* = RECORD (E.Library) END;
  251.  
  252. VAR
  253.  
  254.   base* : LowLevelBasePtr;
  255.  
  256.  
  257. (*-- Library Functions ------------------------------------------------*)
  258.  
  259. (*
  260. **      $VER: lowlevel_protos.h 40.6 (30.7.93)
  261. *)
  262.  
  263. (*--- functions in V40 or higher (Release 3.1) ---*)
  264.  
  265. (* CONTROLLER HANDLING *)
  266.  
  267. LIBCALL (base : LowLevelBasePtr) ReadJoyPort *
  268.   ( port [0] : E.ULONG )
  269.   : E.ULONG;
  270.   -30;
  271.  
  272. (* LANGUAGE HANDLING *)
  273.  
  274. LIBCALL (base : LowLevelBasePtr) GetLanguageSelection * ()
  275.   : E.UBYTE;
  276.   -36;
  277.  
  278. (* KEYBOARD HANDLING *)
  279.  
  280. LIBCALL (base : LowLevelBasePtr) GetKey * ()
  281.   : E.ULONG;
  282.   -48;
  283. LIBCALL (base : LowLevelBasePtr) QueryKeys *
  284.   ( queryArray [8] : KeyQueryPtr;
  285.     arraySize  [1] : E.ULONG );
  286.   -54;
  287. LIBCALL (base : LowLevelBasePtr) AddKBInt *
  288.   ( intRoutine [8] : E.APTR;
  289.     intData    [9] : E.APTR )
  290.   : E.APTR;
  291.   -60;
  292. LIBCALL (base : LowLevelBasePtr) RemKBInt *
  293.   ( intHandle [9] : E.APTR );
  294.   -66;
  295.  
  296. (* SYSTEM HANDLING *)
  297.  
  298. LIBCALL (base : LowLevelBasePtr) SystemControlA *
  299.   ( tagList [9] : ARRAY OF U.TagItem )
  300.   : E.ULONG;
  301.   -72;
  302. LIBCALL (base : LowLevelBasePtr) SystemControl *
  303.   ( tagList [9]..: U.Tag )
  304.   : E.ULONG;
  305.   -72;
  306.  
  307. (* TIMER HANDLING *)
  308.  
  309. LIBCALL (base : LowLevelBasePtr) AddTimerInt *
  310.   ( intRoutine [8] : E.APTR;
  311.     intData    [9] : E.APTR )
  312.   : E.APTR;
  313.   -78;
  314. LIBCALL (base : LowLevelBasePtr) RemTimerInt *
  315.   ( intHandle [9] : E.APTR );
  316.   -84;
  317. LIBCALL (base : LowLevelBasePtr) StopTimerInt *
  318.   ( intHandle [9] : E.APTR );
  319.   -90;
  320. LIBCALL (base : LowLevelBasePtr) StartTimerInt *
  321.   ( intHandle    [9] : E.APTR;
  322.     timeInterval [0] : E.ULONG;
  323.     continuous   [1] : LONGINT );
  324.   -96;
  325. LIBCALL (base : LowLevelBasePtr) ElapsedTime *
  326.   ( VAR context [8] : T.EClockVal )
  327.   : E.ULONG;
  328.   -102;
  329.  
  330. (* VBLANK HANDLING *)
  331.  
  332. LIBCALL (base : LowLevelBasePtr) AddVBlankInt *
  333.   ( intRoutine [8] : E.APTR;
  334.     intData    [9] : E.APTR )
  335.   : E.APTR;
  336.   -108;
  337. LIBCALL (base : LowLevelBasePtr) RemVBlankInt *
  338.   ( intHandle [9] : E.APTR );
  339.   -114;
  340.  
  341. (* MORE CONTROLLER HANDLING *)
  342.  
  343. LIBCALL (base : LowLevelBasePtr) SetJoyPortAttrsA *
  344.   ( portNumber [0] : E.ULONG;
  345.     tagList    [9] : ARRAY OF U.TagItem )
  346.   : BOOLEAN;
  347.   -132;
  348. LIBCALL (base : LowLevelBasePtr) SetJoyPortAttrs *
  349.   ( portNumber [0]  : E.ULONG;
  350.     tagList    [9]..: U.Tag )
  351.   : BOOLEAN;
  352.   -132;
  353.  
  354. (*-- Library Base variable --------------------------------------------*)
  355.  
  356. (*-----------------------------------*)
  357. PROCEDURE* CloseLib ();
  358.  
  359. BEGIN (* CloseLib *)
  360.   IF base # NIL THEN E.base.CloseLibrary (base) END
  361. END CloseLib;
  362.  
  363. (*-----------------------------------*)
  364. PROCEDURE OpenLib * (mustOpen : BOOLEAN);
  365.  
  366. BEGIN (* OpenLib *)
  367.   IF base = NIL THEN
  368.     base :=
  369.       SYS.VAL (
  370.         LowLevelBasePtr,
  371.         E.base.OpenLibrary (name, E.libraryMinimum));
  372.     IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
  373.     ELSIF mustOpen THEN HALT (100)
  374.     END;
  375.   END;
  376. END OpenLib;
  377.  
  378. BEGIN
  379.   base := NIL
  380. END LowLevel.
  381.